package lspay

import (
	"encoding/json"
)

// PayRequest 支付请求
type PayRequest struct {
	// 商户ID
	MerchantId int32 `json:"merchantId"`
	//  订单号-唯一
	OutTradeNo string `json:"outTradeNo"`
	// 订单价格(单位分)
	Amount int64 `json:"amount"`
	// 支付方式(h5, web二维码, app等)
	PayModeType PayModeType `json:"payMode"`
	// 支付渠道
	PayChannel PayChannelType `json:"payChannel"`
	// 重定向地址
	RedirectUrl string `json:"redirectUrl"`
	// 客户端IP
	ClientIp string `json:"clientIp"` // 微信支付需要
	// 客户端设备(场景类型)
	ClientType string `json:"clientType"` // 微信支付需要
	// 用户标识(微信js api支付需要)
	OpenId string `json:"openId"` // 微信支付需要
	// 自定义请求参数map
	ExtJson map[string]any `json:"extJson"`

	UseCustomProduct bool `json:"useCustomProduct"`
	// 自定义商品
	CustomProduct *PayCenterProduct `json:"customProductInfo"`
	NotifyURL     string            `json:"notifyURL"`
}

// Bytes 将请求参数转换为字节数组
func (p *PayRequest) Bytes() []byte {
	bs, _ := json.Marshal(p)
	return bs
}

// PayResponse 支付响应
type PayResponse struct {
	// 订单ID
	OrderId string `json:"orderId"`
	// 预支付参数
	PayParams string `json:"payParams"`
	// 商品明细
	ProductInfo *PayCenterProduct `json:"productInfo"`
}

// String 将响应参数转换为字符串
func (p *PayResponse) String() string {
	bs, _ := json.Marshal(p)
	return string(bs)
}

// PayCenterProduct 自定义商品详情
type PayCenterProduct struct {
	// 商品ID
	ID int32 `json:"id"`
	// 商品名称
	Name string `json:"name"`
	// 商品价格
	Price int64 `json:"price"`
	// 商品说明信息
	Remark string `json:"remark"`
	// 商品属性
	Attr string `json:"attr"`
	// 商品状态
	Status int32 `json:"status"`
	// 商品创建时间 unix时间戳
	CreatedAt int64 `json:"createdAt"`
	// 商品更新时间 unix时间戳
	UpdatedAt int64 `json:"updatedAt"`
	// 商户ID
	MerchantID int32 `json:"merchantId"`
	// 企业ID
	CustomerId uint32 `json:"customerId"`
	// 商城ID
	ShopId uint32 `json:"shopId"`
}
